/*
 * Copyright 2010 - 2011, The PLDesktop Development Team
 *
 *  This library is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Lesser General Public
 *  License as published by the Free Software Foundation; either
 *  version 2.1 of the License, or (at your option) any later version.
 *
 *  This library is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 *  Lesser General Public License for more details.
 *
 *  You should have received a copy of the GNU Lesser General Public
 *  License along with this library; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 *
 */

#include <bootoutput.h>

extern "C" void kprintf(const char *format, ...) {
	char **arg = (char **)&format;
	int c;
	char buf[20];
	arg++;
	while((c = *format++) != 0) {
		if(c != '%') {
			PLBootOutput::instance().putchar(c, PLBootOutput::instance().currentAttributes());
		} else {
			char *p;
			c = *format++;
			switch (c) {
				case 'd':
				case 'u':
				case 'x':
					PLBootOutput::instance().itoa(buf, c, *((int *)arg++));
					p = buf;
					PLBootOutput::instance().printString(p);
					break;
				case 's':
					p = *arg++;
					if(! p) {
						p = (char *)"(null)";
					}
					PLBootOutput::instance().printString(p);
					break;
				default:
					PLBootOutput::instance().putchar(*((int *) arg++), PLBootOutput::instance().currentAttributes());
					break;
			}
		}
	}
}
